#include "EstadoDeEsperaDeJugadores.h"
#include "EstadoDePreparacionDePartida.h"
#include "JugadorExistenteException.h"
#include "Server.h"
#include <vector>
#include <iostream>
#include <sstream>
using namespace std;

EstadoDeEsperaDeJugadores::EstadoDeEsperaDeJugadores(JuegoServerImp* juego) {
	this->juego = juego;
}

void EstadoDeEsperaDeJugadores::unirse(Jugador* jugador) {
	if (juego->getJugador(jugador->getColor()) == NULL) {
		juego->getJugadores()->push_back(jugador);
	}
	else
		throw JugadorExistenteException();
	if (juego->getJugadores()->size() == juego->getCantidadDeJugadores()) {
		this->enviarDatosJugadores();
		juego->setEstado(juego->getEstadoDePreparacionDePartida());
		((EstadoDePreparacionDePartida*)juego->getEstadoDePreparacionDePartida())->asignarEjercitos();
	}
}

bool EstadoDeEsperaDeJugadores::enviarDatosJugadores() {
	vector<Jugador*>* jugadores = this->juego->getJugadores();
	for (int i = 0; i < jugadores->size(); i++) {
		string mensaje = "<updateJugadores>\n";
		this->juego->getServer()->enviarMensaje(jugadores->at(i),mensaje);
		Jugador* aux = jugadores->at(i);
		for (int j = 0; j < jugadores->size(); j++) {
			if (jugadores->at(j) != aux) {
				string mensaje = "	<datosJugador nombre=\""+jugadores->at(j)->getNombre()+"\" color=\""+ jugadores->at(j)->getColor()+"\"/>\n";
				this->juego->getServer()->enviarMensaje(jugadores->at(i),mensaje);
			}
		}
		mensaje = "</updateJugadores>\n";
		this->juego->getServer()->enviarMensaje(jugadores->at(i),mensaje);
	}
}

string EstadoDeEsperaDeJugadores::toString() {
	return "EstadoDeEsperaDeJugadores";
}

EstadoDeEsperaDeJugadores::~EstadoDeEsperaDeJugadores()
{
}
